package com.xjrh.travel.data.apply.service;

import com.xjrh.travel.data.apply.dao.StationWaveCheckDao;
import com.xjrh.travel.data.apply.dao.StationWaveCheckDetailsDao;
import com.xjrh.travel.entity.wave.StationWaveCheck;
import com.xjrh.travel.entity.wave.StationWaveCheckDetails;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 站点区间波磨检查结果Service
 *
 * @author snps
 * @create 2025-10-30 23:09
 * @describe
 **/
@Service("stationWaveCheckService")
public class StationWaveCheckService {

    @Resource
    private StationWaveCheckDao stationWaveCheckDao;

    @Resource
    private StationWaveCheckDetailsDao stationWaveCheckDetailsDao;


    /**
     * 保存波磨检查结果
     *
     * @param stationWaveCheck StationWaveCheck
     */
    @Transactional
    public void save(StationWaveCheck stationWaveCheck) {
        // 保存 波磨检查结果
        if (stationWaveCheck != null) {
            stationWaveCheckDao.save(stationWaveCheck);
        }

        // 批量保存 波磨检查结果-详细数据
        if (stationWaveCheck.getWaveData() != null) {
            for (StationWaveCheckDetails waveCheckData : stationWaveCheck.getWaveData()) {
                waveCheckData.setWaveCheckId(stationWaveCheck.getId());
                waveCheckData.setStartRange(waveCheckData.getStartRange().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                waveCheckData.setEndRange(waveCheckData.getEndRange().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                waveCheckData.setWaveDep(waveCheckData.getWaveDep().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                waveCheckData.setWaveLen(waveCheckData.getWaveLen().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                waveCheckData.setAccRms(waveCheckData.getAccRms().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                waveCheckData.setAccMax(waveCheckData.getAccMax().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                waveCheckData.setRciMax(waveCheckData.getRciMax().divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
                // 设置波磨等级
                waveCheckData.setBomoLevel(this.getWaveLevel(waveCheckData.getRciMax().doubleValue()));
                // TODO 保存波磨详细检测数据时去掉：rciDetails，dataDetails
                /*waveCheckData.setRciDetails(null);
                waveCheckData.setDataDetails(null);*/
            }
            stationWaveCheckDetailsDao.batchSave(stationWaveCheck.getWaveData());
        }
    }


    /**
     * 通过 rciMax的值计算波磨等级
     *
     * @param rciMax
     * @return int 波磨等级
     */
    private int getWaveLevel(Double rciMax) {
        if (rciMax == null) {
            return 0;
        }

        if (rciMax < 2) {
            return 0;
        } else if (rciMax >= 2 && rciMax < 4) {
            return 1;
        } else if (rciMax >= 4 && rciMax < 6) {
            return 2;
        } else if (rciMax >=6) {
            return 3;
        } else {
            return 0;
        }
    }


}